#ifndef _PARALLELEPIPEDE_H
#define _PARALLELEPIPEDE_H

#include "FormeComposee.hpp"
#include "Plan.hpp"

#include <vector>

/**
 * Classe implémentant le parrallélépipède pour le raytracing.  Il est
 * composé de l'intersection de 6 plans. Il est donc définit dans le
 * système de coordonnées globales.
 *
 * Forme::baryCentre est le centre de gravité du Parrallelepipede.
 *
 * @author Jean-Marc Comby
 * @author Romain Dequesne
 * @author Johan "Solo" Luisier
 *
 * @date 21 Mai 2004
 */
class Parallelepipede : public FormeComposee
{
 public:
  //constructeur
  // on donne deux vecteur de base (x,y) et une coord pour la position
  Parallelepipede(const Coord& a, const Vecteur& x, const Vecteur& y,
		  const Vecteur& z);
  //destructeur
  virtual ~Parallelepipede();

 private:
  /**
   * Liste des 6 plans utilisés.
   */
  std::vector< Plan::SharedPtr > listPlan;
  /**
   * Liste des formes composées intermédiaires.
   */
  std::vector< FormeComposee::SharedPtr > listFC;
  //methode d'orienteation
  VecteurU Oriente(const Vecteur &, const char &, const Vecteur &) const;
};

#endif
